# 开发一个简单的商品库存管理系统，管理员可以查询商品的库存数量，修改库存值，并添加新的商品记录。为了确保系统的稳定性，需要对输入异常、文件操作异常等进行处理，避免因用户输入错误或文件丢失导致系统崩溃。
# 查询商品库存：从文件中读取商品库存数据并展示。
# 修改商品库存：根据商品名称修改库存数量。
# 添加新商品：向文件中添加新的商品记录。
# 捕获用户输入错误（如输入非数字时的类型异常）。
# 捕获文件读写错误。
# 捕获商品名称不存在的自定义异常。


class StoreError(Exception):
  pass


def check_admin(func):
  def wrapper(*args, **kwargs):
    user = kwargs.get("user", "guest")
    if user == "admin":
      print(f"{user}身份权限核验成功!")
      return func(*args, **kwargs)
    else:
      raise PermissionError("只有管理员可以执行此操作")
  return wrapper


goods_path = "goods.txt"

# 查询商品库存：从文件中读取商品库存数据并展示。
def show_stores(goods_path):
  '''
  从文件中读取商品库存数据，并展示。
  :return:
  '''
  with open(goods_path, "r") as goods_path:
    goods = goods_path.readlines()
    if not goods:
      print("没有库存信息！")
      return
    else:
      print("商品库存如下：")
      for g in goods:
        print(g)


def update_stores(goods_path):
  print("进入商品库存修改界面，请按要求输入商品库存信息：")
  with open(goods_path, "r") as goods:
    lines = goods.readlines()
  target_goods_name = input("请输入货品名：")
  with open(goods_path, "w") as goods:
    for l in lines:
      if target_goods_name in l:
        quantity = int(input("货品数量修改为："))
        if quantity > 0:
          goods.write(f"{target_goods_name}, {quantity}")
          print("商品库存修改完毕~")
          return
        else:
          print("货品数量格式错误，无法修改！")
          return
      else:
        print("不存在该商品，无法修改")
        return


# 添加新商品：向文件中添加新的商品记录。
def add_stores(goods_path):
  """
  向文件中添加新的商品记录。
  :return:
  """
  with open(goods_path, "a") as goods:
    print("进入商品库存添加界面，请按要求输入商品库存信息：")
    goods_name = input("请输入货品名：")
    quantity = int(input("请输入商品数量："))
    if goods_name in goods_path:
      print("已存在该商品，无法添加！")
      return
    elif quantity < 0:
      print("商品数量格式错误，无法添加！")
      return
    else:
      goods_info = f"{goods_name}, {quantity}\n"
      with open(goods_path, "a") as goods:
        goods.write(goods_info)
      print("商品添加完毕~")
      return


@check_admin
def stores_management_system(goods_path, **kwargs):
  """
  订单管理系统
  :return:
  """
  while True:
    print("商品库存管理系统")
    print("1. 添加新商品")
    print("2. 查看商品库存")
    print("3. 修改商品库存")
    print("4. 退出")
    choice = input("请输入操作序号：\n")

    if choice == "1":
      add_stores(goods_path)

    elif choice == "2":
      show_stores(goods_path)

    elif choice == "3":
      update_stores(goods_path)

    elif choice == "4":
      exit()


if __name__ == '__main__':
    with open(goods_path, "a") as goods:
      # 创建空文件
      pass
    stores_management_system(goods_path, user="admin")
